package bank;

public class _08StrtoInt {
    public static int myAtoi(String s) {
        char[] chars = s.toCharArray();
        int len = chars.length;
        //下标
        //这种方法思想很重要，遇到不符合的情况先记录，之后再处理
        int index = 0;
        while (index<len && chars[index]==' '){
            //去空格
            index++;
        }
        //算法健壮性，用于针对"       "的情况
        if(index == len){
            return 0;
        }
        boolean negative = false;
        if(chars[index] == '-'){
            negative = true;
            index++;
        }else if(chars[index] == '+'){
            index++;
        }else if(!Character.isDigit(chars[index])){//重要方法！！！！！
            return 0;
        }
        int res = 0;
        while(index<len && Character.isDigit(chars[index])){
            //重要方法：用于字符和数字的转换！！！
            int digit = chars[index] - '0';
            //重要判据：用于判断
            if (res > (Integer.MAX_VALUE - digit) / 10) {
                // 本来应该是 res * 10 + digit > Integer.MAX_VALUE
                // 但是 *10 和 + digit 都有可能越界，所有都移动到右边去就可以了。
                return negative? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            //从高位向低位读数，每往下读数之前，上一位数字x10
            res = res*10 + digit;
            index++;
        }
        return negative ? -res : res;
    }
}
